package done.easy_601_700;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

/**
 * 605. Can Place Flowers 种花问题
 * 假设你有一个很长的花坛，一部分地块种植了花，另一部分却没有。
 * 可是，花卉不能种植在相邻的地块上，它们会争夺水源，两者都会死去。
 * 给定一个花坛（表示为一个数组包含0和1，其中0表示没种植花，1表示
 * 种植了花），和一个数 n 。能否在不打破种植规则的情况下种入 n 朵
 * 花？
 * 能则返回True，不能则返回False。
 * <p>
 * 示例 1:
 * 输入: flowerbed = [1,0,0,0,1], n = 1
 * 输出: True
 * 示例 2:
 * 输入: flowerbed = [1,0,0,0,1], n = 2
 * 输出: False
 *
 * @author wangxiaozhe
 */
@Slf4j
public class CanPlaceFlowers {

    @SuppressWarnings("all")
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        // 190403 first
        // 190407 second 用了两次才解决
        return false;
    }

    @Test
    public void test() {
        int[] flower = new int[]{1, 0, 0, 0, 0, 0, 1};
        int n = 2;
        log.info("{}", canPlaceFlowers(flower, n));
    }
}













































/*
public boolean canPlaceFlowers(int[] flowerbed, int n) {
    int count = 1;

    for (int i : flowerbed) {
        // 极端情况 0开头  0-0-0-1-xxxxxx
        // 需要先判断 i==0的情况 再判断 i!=0
        if (i == 0) {
            count++;
        } else {
            // 能放下花的数量与连续的0的数量有关
            // 公式为 num = (n-1) / 2
            // 0-0-0          连续1个0  (3-1) / 2
            // 0-0-0-0-0      连续2个0  (5-1) / 2
            // 0-0-0-0-0-0-0  连续3个0  (7-1) / 2
            n = n - (count - 1) / 2;
            count = 0;
        }
    }

    // 结尾是 0-0-0 的情况下，后面不会有1了
    // 但是可以种一朵花，此时要计算出来
    // 但是如果已经是 1-0-0 种不下了，
    // 会成为负数 n <= 0 其实也可以
    return (n - count / 2) <= 0;
}
*/
